package com.lp.biz.coupon.controller;

import com.lp.biz.coupon.model.query.CouponQuery;
import com.lp.biz.coupon.model.vo.CouponAdd;
import com.lp.biz.coupon.model.vo.SpecifyCouponAdd;
import com.lp.biz.coupon.service.BizCouponService;
import com.lp.common.annotation.PermissionAnnotation;
import com.lp.common.utils.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import static com.lp.common.constant.MenuConstant.COUPON_LIST;
import static com.lp.common.constant.MenuConstant.COUPON_USE_LIST;

/**
 * BizCouponController
 * @program: backend
 * @author Ke.Song
 * @since 2024-07-21 23:38:11
 */
@RestController
@RequestMapping("/coupon")
public class BizCouponController {

    @Autowired
    private BizCouponService couponService;

    /**
     * 获取优惠券列表
     * @param query 查询参数
     * @return 查询结果
     */
    @GetMapping()
    @PermissionAnnotation(menus = {COUPON_LIST})
    public CommonResult getCouponList(CouponQuery query) {
        return couponService.getCouponList(query);
    }

    /**
     * 创建优惠券
     * @param params 优惠券参数
     * @return 处理结果
     */
    @PostMapping()
    @PermissionAnnotation(menus = {COUPON_LIST})
    public CommonResult addCoupon(@RequestBody @Validated CouponAdd params) {
        couponService.addCoupon(params);
        return CommonResult.success();
    }

    /**
     * 删除优惠券
     * @param couponId 优惠券id
     * @return 处理结果
     */
    @DeleteMapping("/{couponId}")
    @PermissionAnnotation(menus = {COUPON_LIST})
    public CommonResult deleteCoupon(@PathVariable Integer couponId) {
        couponService.deleteCoupon(couponId);
        return CommonResult.success();
    }

    /**
     * 指定用户发放优惠券
     * @return 处理结果
     */
    @PostMapping("/specify")
    @PermissionAnnotation(menus = {COUPON_LIST})
    public CommonResult specifyMember(@RequestBody@Validated SpecifyCouponAdd params) {
        couponService.specifyMember(params);
        return CommonResult.success();
    }

    /**
     * 获取指定优惠券列表
     * @param query 查询参数
     * @return 查询结果
     */
    @GetMapping("/specify")
    @PermissionAnnotation(menus = {COUPON_LIST})
    public CommonResult getSpecifyCoupon(CouponQuery query) {
        return couponService.getSpecifyCoupon(query);
    }

    /**
     * 删除指定优惠券列表
     * @param couponId 优惠券id
     * @return 查询结果
     */
    @DeleteMapping("/specify/{couponId}")
    @PermissionAnnotation(menus = {COUPON_LIST})
    public CommonResult deleteSpecifyCoupon(@PathVariable Integer couponId) {
        couponService.deleteSpecifyCoupon(couponId);
        return CommonResult.success();
    }

    /**
     * 获取优惠券汇总
     * @return 查询结果
     */
    @GetMapping("/summary")
    @PermissionAnnotation(menus = {COUPON_USE_LIST})
    public CommonResult getCouponSummary() {
        return couponService.getCouponSummary();
    }

    /**
     * 获取已使用优惠券列表
     * @param query 查询参数
     * @return 查询结果
     */
    @GetMapping("/use")
    @PermissionAnnotation(menus = {COUPON_USE_LIST})
    public CommonResult getUseCouponList(CouponQuery query) {
        return couponService.getUseCouponList(query);
    }

    /**
     * 获取未使用优惠券列表
     * @param query 查询参数
     * @return 查询结果
     */
    @GetMapping("/not-use")
    @PermissionAnnotation(menus = {COUPON_USE_LIST})
    public CommonResult getNotUseCouponList(CouponQuery query) {
        return couponService.getNotUseCouponList(query);
    }

}
